#!/opt/python/bin/python3
from bg_tool import change_bg
import atexit
import signal
import os
import sys
import logging


def daemonize(pidfile):
    # 如果pid文件存在，则端口可能被占用，可能会出现异常
    if os.path.exists(pidfile):
        raise RuntimeError('程序正在运行～')
    # 第一次fork
    try:
        if os.fork()>0:
            raise SystemExit(0)
    except OSError as e:
        raise RuntimeError('fork #1 失败.')
    os.chdir('/')
    os.umask(0)
    os.setsid()
    # 第二次fork
    try:
        if os.fork() > 0:
            raise SystemExit(0)
    except OSError as e:
        raise RuntimeError('fork #2 失败.')

    #c创建pid文件
    with open(pidfile, 'w') as f:
        print(os.getpid(), file=f)
    #退出时清理pid文件
    atexit.register(lambda: os.remove(pidfile))

    def sigterm_handler(signo, frame):
        raise SystemExit(1)

    signal.signal(signal.SIGTERM, sigterm_handler)


if __name__ == '__main__':
    # 图片资源文件夹
    DIR = '/home/xiaoqiang/图片/bwp/'
    # 间隔时间
    INTERVAL = 10
    # 日志文件
    LOGFILE = 'demo.log'
    logging.basicConfig(level=logging.INFO, filename=LOGFILE)
    # 端口文件
    PIDFILE = '/tmp/daemon.pid'
    # 参数处理
    if len(sys.argv) != 2:
        print('Usage: {} [start|stop]'.format(sys.argv[0]))
        raise SystemExit(1)

    if sys.argv[1] == 'start':
        try:
            daemonize(PIDFILE)
        except RuntimeError as e:
            print('亲，进程已近启动了，不需要再次启动了～')
            raise SystemExit(1)
        change_bg(img_dir_path=DIR, interval=INTERVAL)
    elif sys.argv[1] == 'stop':
        if os.path.exists(PIDFILE):
            with open(PIDFILE) as f:
                os.kill(int(f.read()), signal.SIGTERM)
        else:
            print('亲，进程没启动呢～')
            raise SystemExit(1)
    else:
        print('亲，请别随便输入指令哦～')
        raise SystemExit(1)